package com.sz.biz.logistics.bill.service;

import com.sz.biz.logistics.bill.dto.BillingOrderFeeDto;
import com.sz.biz.logistics.bill.dto.BillingOrderListDto;
import com.sz.common.base.dao.ParamData;
import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;
import com.sz.biz.logistics.bill.entity.BillingOrderRel;
import com.sz.biz.logistics.bill.dto.BillingOrderListStringDto;

import java.util.List;
import java.util.Map;

/**
 * Function: 账单订单关联 <br>
 * Author: jifeixing <br>
 * Date: 2017-05-17 14:09:00
 */

public interface BillingOrderRelService {

    /**
     * 保存账单关联关系
     *
     * @param billingOrderRel
     */
    void save(BillingOrderRel billingOrderRel);

    /**
     * 根据账单号获取账单下所有订单
     * @param params
     * @return
     */
    QResultDto getOrdersByBillNo(QueryParams params);

    /**
     * 根据账单号获取账单下所有订单-客户平台
     * @param q
     * @param billNo
     * @param orderNo
     * @param productUid
     * @param customerId
     * @param startEffectTime
     * @param endEffectTime
     * @param isSearch
     *@param pageIndex
     * @param pageSize
     * @param sort
     * @param asc     @return
     */
    QResultDto getOrdersByBillNoForCustomer(String q, String billNo, String orderNo, String productUid, Integer customerId, String startEffectTime, String endEffectTime, Boolean isSearch, int pageIndex, int pageSize, String sort, Boolean asc,String type);

    /**
     * 子帐号订单费用总计
     * @param billNo
     * @param userId
     * @return
     */
    Map<String, Object> getOrderAmountSub(String billNo, Integer userId,String type);

    /**
     * z账单下所有订单
     * @param billNo
     * @return
     */
    List<BillingOrderListStringDto> findOrdersByBillNo(String billNo,String type);

    /**
     * 根据账单号获取下属所有订单号
     * @param billNos
     * @return
     */
    List<String> findOrderNosByBillNo(List<String> billNos,String type);

    List<BillingOrderFeeDto> getOrderFee(List<BillingOrderListDto> billingList, String type);

    /**
     * 根据账单号删除
     * @param billNo
     */
    void deleteByBillNo(String billNo,String type,Integer supplier);

    /**
     * 根据任务编码删除账单订单关联
     * @param taskCodes
     */
    void batchDeleteByTaskCodes(List<String> taskCodes,String typer);

    /**
     * 删除账单下所有订单
     * @param billNos
     */
    void deleteByBillNos(List<String> billNos,String type,Integer supplier);

    List<BillingOrderListStringDto> ordersByBillNoAndSupplier(ParamData pd, String sqlName);
    /**
     * 删除账单下所有订单关联表
     * @param billNos
     */
    void deleteByBillNosOrderRe(List<String> billNos,String type);
}
